'use strict';

const Service = require('egg').Service;

class MessageService extends Service {
  // 保存消息
  async create(wxid, message, timestamp) {
    const { ctx } = this;

    // 提取消息的前30个字符
    const shortMessage = message.substring(0, 30);

    // 检查是否存在包含这30个字符的记录
    const existingMsg = await ctx.model.Chatmsg.findOne({
      message: {
        $regex: new RegExp(
          shortMessage.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
        ),
      }, // 使用正则表达式安全地查询
    });

    if (existingMsg) {
      console.log('消息已存在，不重复保存');
      return false; // 存在相似消息，不保存新消息
    }
    // 保存新消息
    const savedata = new ctx.model.Chatmsg({
      wxid,
      message,
      timestamp,
    });
    const res = await savedata.save();
    if (res._id) {
      return res._id;
    }
    return false;


  }
  // 每日定时任务：删除已处理过的聊天记录
  async removeChatMsg() {
    const { ctx } = this;
    try {
      // 使用 deleteMany 删除所有符合条件的记录
      const result = await ctx.model.Chatmsg.deleteMany({ isparts: true });
      ctx.status = 200;
      ctx.body = {
        success: true,
        message: 'Messages deleted successfully',
        deletedCount: result.deletedCount,
      };
    } catch (error) {
      ctx.status = 500;
      ctx.body = { success: false, message: error.message };
    }
  }

  async maskPhoneNumber(text) {
    // 匹配常见手机号（11位数字，或带区号的格式）
    return text.replace(/(\b1\d{10}\b)|(\b\d{3,4}-?\d{7,8}\b)/g, match => '*'.repeat(match.length)
    );
  }

  // 格式化文本
  async formateText() { 
    const { ctx, service } = this;
    // 转发群信息 到另外一个群聊（员工专用）
    const msg = await ctx.model.Chatmsgbak.findOne({ isformate: false }).sort({
      createTime: -1,
    }).lean();    
    // console.log('=== 处理内容 ===');
    const text = JSON.parse(msg.message);
    // console.log(text);

    const prompt = `你是一个专业的价格信息提取助手，请严格按照以下规则处理供应商发来的商品文本：
【处理规则】
1. 数据清洗：
   - 移除所有与商品无关的文本（联系方式、广告语、表情符号等）
   - 保留包含价格的核心商品信息

2. 格式规范：
   * 每行严格遵循"品牌,型号,价格"三列格式
   * 使用中文逗号分隔（，）
   * 价格统一格式：保留数字+货币符号（如￥299）
   * 品牌识别优先级：
     1) 文本中明确提到的品牌名称
     2) 行业通用缩写（如APP→苹果）
     3) 无法识别时填写"未知"

3. 输出要求：
   - 仅返回整理后的数据   
   - 如果返回数据中没有价格信息，返回"没有价格"
   - 禁止添加任何解释说明
   - 缺失字段用"NA"占位
   - 每个商品独立成行

【输入示例】
"最新报价
Mate50 5G版 ￥5499 
新款iPad Pro 11寸 8999
三星S23U 优惠价:8699"

【输出示例】
华为，Mate50 5G版，￥5499
苹果，iPad Pro 11寸，￥8999
三星，S23U，￥8699

请处理以下文本：\n\n${text}`;
    console.log("======开始处理======");
    const content = await service.openai.getDeepseek(prompt);
    console.log("AI回复内容：", content);
    const res = await ctx.model.Chatmsgbak.updateOne({ _id: msg._id }, { 
      formatemsg: content,
      isformate: true
    });
    if (res._id) {
      console.log("======处理完成======");
      return res._id;
    }
  }
}

module.exports = MessageService;
